"""
静态方法

总结：
    实例方法：操作对象的数据
    类方法：操作类的变量
    静态方法：既不需要操作实例变量也不需要操作类变量
"""
list01 = [
    ["00", "01", "02", "03"],
    ["10", "11", "12", "13"],
    ["20", "21", "22", "23"],
    ["30", "31", "32", "3 3"],

]


class Vector2:
    """"
    二维向量类
    可以表示位置、方向
    """

    def __init__(self, x, y):
        self.x = x
        self.y = y

    @staticmethod
    def left():  # 静态方法:表示左边方向
        return Vector2(0, -1)

    @staticmethod
    def right():  # 静态方法:表示右边方向
        return Vector2(0, 1)

    @staticmethod
    def get_elements(target, vector_pos, vector_dir, count):
        """
        在二维列表中获取指定位置，指定方向，指定数量的元素.
        :param target: 二维列表
        :param vector_pos: 指定位置
        :param vector_dir: 指定方向
        :param count: 指定数量
        :return: 列表
        """

        list_result = []
        for i in range(count):
            vector_pos.x += vector_dir.x
            vector_pos.y += vector_dir.y
            element = target[vector_pos.x][vector_pos.y]
            list_result.append(element)
        return list_result


# 作用：位置+方向
pos01 = Vector2(1, 2)
# 通过类名调用静态方法
l01 = Vector2.left()
pos01.x += l01.x
pos01.y += l01.y
print(pos01.x, pos01.y)

# 在二维列表中获取指定位置，指定方向，指定数量的元素.
# 例如：list01　"10"　右边　３ --> "11", "12", "13"
# 例如：list01　Vector2(1, 0)　Vector2.right()　３ --> "11", "12","13"

re = Vector2.get_elements(list01, Vector2(1, 0), Vector2.right(), 3)
print(re)
# 例如：list01　"23"　左边　2
re = Vector2.get_elements(list01, Vector2(2, 3), Vector2.left(), 2)
print(re)
